{
	"info": {
		"_postman_id": "e0094b6d-9306-4632-a9ba-7e26b366c14f",
		"name": "feature",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"_exporter_id": "28916804"
	},
	"item": [
		{
			"name": "add data",
			"item": [
				{
					"name": "Добавление новой категории",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
									"    pm.response.to.have.status(201);\r",
									"    pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"\r",
									"const source = JSON.parse(pm.request.body.raw);\r",
									"const target = pm.response.json();\r",
									"\r",
									"pm.test(\"Категория должна содержать поля: id, name\", function () {\r",
									"pm.expect(target).to.have.property('id');\r",
									"pm.expect(target).to.have.property('name');\r",
									"});\r",
									"\r",
									"pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
									"    pm.expect(target.id).to.not.be.null;\r",
									"    pm.expect(source.name).equal(target.name, 'Название категории должно совпадать с отправленным');\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\r\n  \"name\": \"Отдых\"\r\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/admin/categories",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"admin",
								"categories"
							]
						},
						"description": "Обратите внимание: имя категории должно быть уникальным"
					},
					"response": []
				},
				{
					"name": "Добавление user id 1",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
									"    pm.response.to.have.status(201);\r",
									"    pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"\r",
									"const source = JSON.parse(pm.request.body.raw);\r",
									"const target = pm.response.json();\r",
									"\r",
									"pm.test(\"Категория должна содержать поля: id, name\", function () {\r",
									"pm.expect(target).to.have.property('id');\r",
									"pm.expect(target).to.have.property('name');\r",
									"});\r",
									"\r",
									"pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
									"    pm.expect(target.id).to.not.be.null;\r",
									"    pm.expect(source.name).equal(target.name, 'Название категории должно совпадать с отправленным');\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\r\n  \"email\": \"ivan.petrov@practicummail.ru\",\r\n  \"name\": \"Иван Петров\"\r\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/admin/users",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"admin",
								"users"
							]
						},
						"description": "Обратите внимание: имя категории должно быть уникальным"
					},
					"response": []
				},
				{
					"name": "Добавление user id 2",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Ответ должен содержать код статуса 201 и данные в формате json\", function () {\r",
									"    pm.response.to.have.status(201);\r",
									"    pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"\r",
									"const source = JSON.parse(pm.request.body.raw);\r",
									"const target = pm.response.json();\r",
									"\r",
									"pm.test(\"Категория должна содержать поля: id, name\", function () {\r",
									"pm.expect(target).to.have.property('id');\r",
									"pm.expect(target).to.have.property('name');\r",
									"});\r",
									"\r",
									"pm.test(\"Данные в ответе должны соответствовать данным в запросе\", function () {\r",
									"    pm.expect(target.id).to.not.be.null;\r",
									"    pm.expect(source.name).equal(target.name, 'Название категории должно совпадать с отправленным');\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\r\n  \"email\": \"ivan.ivanov@practicummail.ru\",\r\n  \"name\": \"Иван Иванов\"\r\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/admin/users",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"admin",
								"users"
							]
						},
						"description": "Обратите внимание: имя категории должно быть уникальным"
					},
					"response": []
				},
				{
					"name": "Создание нового события",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 201\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([201]);\r",
									"});\r",
									"\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\r\n  \"annotation\": \"Сплав на байдарках похож на полет.\",\r\n  \"category\": 1,\r\n  \"description\": \"Сплав на байдарках похож на полет. На спокойной воде — это парение. На бурной, порожистой — выполнение фигур высшего пилотажа. И то, и другое дарят чувство обновления, феерические эмоции, яркие впечатления.\",\r\n  \"eventDate\": \"2024-12-31 15:10:05\",\r\n  \"location\": {\r\n    \"lat\": 55.754167,\r\n    \"lon\": 37.62\r\n  },\r\n  \"paid\": true,\r\n  \"participantLimit\": 10,\r\n  \"requestModeration\": false,\r\n  \"title\": \"Сплав на байдарках\"\r\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/users/1/events",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"users",
								"1",
								"events"
							]
						},
						"description": "Обратите внимание: имя категории должно быть уникальным"
					},
					"response": []
				}
			]
		},
		{
			"name": "Comments",
			"item": [
				{
					"name": "Ошибка создания комментария (событие не опубликовано)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 409\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([409]);\r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\"text\": \"Текст комментария\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId/events/:eventId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId",
								"events",
								":eventId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "1"
								},
								{
									"key": "eventId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Ошибка создания комментария (несуществующий пользователь)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 404\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([404]);\r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\"text\": \"Текст комментария\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId/events/:eventId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId",
								"events",
								":eventId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "999"
								},
								{
									"key": "eventId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Ошибка создания комментария (несуществующее событие)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 404\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([404]);\r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\"text\": \"Текст комментария\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId/events/:eventId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId",
								"events",
								":eventId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "1"
								},
								{
									"key": "eventId",
									"value": "999"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Публикация события",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Ответ должен содержать код статуса 200 и данные в формате json\", function () {\r",
									"    pm.response.to.be.ok;    \r",
									"    pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PATCH",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "eventId",
								"value": "",
								"type": "text"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\"stateAction\": \"PUBLISH_EVENT\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "{{baseUrl}}/admin/events/:eventId",
							"host": [
								"{{baseUrl}}"
							],
							"path": [
								"admin",
								"events",
								":eventId"
							],
							"variable": [
								{
									"key": "eventId",
									"value": "1"
								}
							]
						},
						"description": "Обратите внимание:\n - дата начала события должна быть не ранее чем за час от даты публикации.\n- событие должно быть в состоянии ожидания публикации"
					},
					"response": []
				},
				{
					"name": "Cоздание комментария",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"const target = pm.response.json();\r",
									"pm.test(\"Комментарии должны содержать поля: 'id', 'text', 'authorId','eventId', 'created', 'isEdited'\", function () {\r",
									"    pm.expect(target).to.have.all.keys('id', 'text', 'authorId','eventId', 'created', 'isEdited');\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\"text\": \"Текст комментария\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId/events/:eventId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId",
								"events",
								":eventId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "1"
								},
								{
									"key": "eventId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Ошибка создания комментария (пустое поле в теле)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 400\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([400]);\r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\"text\": \"\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId/events/:eventId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId",
								"events",
								":eventId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "1"
								},
								{
									"key": "eventId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Получение комментариев пользователя 1",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {\r",
									"    pm.response.to.be.ok;\r",
									"   pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"\r",
									"const target = pm.response.json();\r",
									"pm.test(\"Ответ должен быть массивом\", function () {\r",
									"    pm.expect(target).is.an('array');\r",
									" \r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Получение комментариев пользователя 2 (пустой список)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {\r",
									"    pm.response.to.be.ok;\r",
									"   pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"\r",
									"const target = pm.response.json();\r",
									"pm.test(\"Ответ должен быть пустым массивом\", function () {\r",
									"    pm.expect(target).is.an('array');\r",
									" \r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "2"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Изменение комментария 1 пользователя",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"const target = pm.response.json();\r",
									"pm.test(\"Комментарии должны содержать поля: 'id', 'text', 'authorId','eventId', 'created', 'isEdited'\", function () {\r",
									"    pm.expect(target).to.have.all.keys('id', 'text', 'authorId','eventId', 'created', 'isEdited');\r",
									"});\r",
									"\r",
									"pm.test(\"Проверка значения поля isEdited\", function () {\r",
									"    var jsonData = pm.response.json();\r",
									"    pm.expect(jsonData.isEdited).to.eql(true);\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PATCH",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\"text\": \"Обновленный комментарий\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/comments/:commentId/users/:userId/",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								":commentId",
								"users",
								":userId",
								""
							],
							"variable": [
								{
									"key": "commentId",
									"value": "1"
								},
								{
									"key": "userId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Ошибка изменения комментария пользователя 2 (не автор комментария)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 409\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([409]);\r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PATCH",
						"header": [],
						"body": {
							"mode": "raw",
							"raw": "{\"text\": \"Обновленный комментарий\"}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": {
							"raw": "http://localhost:8080/comments/:commentId/users/:userId/",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								":commentId",
								"users",
								":userId",
								""
							],
							"variable": [
								{
									"key": "commentId",
									"value": "1"
								},
								{
									"key": "userId",
									"value": "2"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Поиск админом комментариев (без параметров)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 400\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([400]);\r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "http://localhost:8080/admin/comments/search",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"admin",
								"comments",
								"search"
							]
						}
					},
					"response": []
				},
				{
					"name": "Поиск админом комментариев",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Ответ должен содержать код статуса 200 и данные в формате json\", function () {\r",
									"    pm.response.to.be.ok;    \r",
									"    pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"const target = pm.response.json()[0];\r",
									"pm.test(\"Комментарии должны содержать поля: 'id', 'text', 'authorId','eventId', 'created', 'isEdited'\", function () {\r",
									"    pm.expect(target).to.have.all.keys('id', 'text', 'authorId','eventId', 'created', 'isEdited');\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "http://localhost:8080/admin/comments/search?text=комментарий",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"admin",
								"comments",
								"search"
							],
							"query": [
								{
									"key": "text",
									"value": "комментарий"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Получение всех комментариев по событию",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Ответ должен содержать код статуса 200 и данные в формате json\", function () {\r",
									"    pm.response.to.be.ok;    \r",
									"    pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"const target = pm.response.json()[0];\r",
									"pm.test(\"Комментарии должны содержать поля: 'id', 'text', 'authorId','eventId', 'created', 'isEdited'\", function () {\r",
									"    pm.expect(target).to.have.all.keys('id', 'text', 'authorId','eventId', 'created', 'isEdited');\r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "http://localhost:8080/comments/:eventId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								":eventId"
							],
							"variable": [
								{
									"key": "eventId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Удаление админом комментария",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 204\", function () {\r",
									"    pm.expect(pm.response.code).to.be.oneOf([204]);\r",
									"});\r",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "http://localhost:8080/admin/comments/:commentId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"admin",
								"comments",
								":commentId"
							],
							"variable": [
								{
									"key": "commentId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Получение комментариев пользователя 1 (пустая коллекция после удаления комментария)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {\r",
									"    pm.response.to.be.ok;\r",
									"   pm.response.to.be.withBody;\r",
									"    pm.response.to.be.json;\r",
									"});\r",
									"\r",
									"const target = pm.response.json();\r",
									"pm.test(\"Ответ должен быть пустым массивом\", function () {\r",
									"    pm.expect(target).is.an('array');\r",
									" \r",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "http://localhost:8080/comments/users/:userId",
							"protocol": "http",
							"host": [
								"localhost"
							],
							"port": "8080",
							"path": [
								"comments",
								"users",
								":userId"
							],
							"variable": [
								{
									"key": "userId",
									"value": "1"
								}
							]
						}
					},
					"response": []
				}
			]
		}
	],
	"variable": [
		{
			"key": "baseUrl",
			"value": " http://localhost:8080"
		},
		{
			"key": "Event ID",
			"value": "{(eid)}"
		},
		{
			"key": "eid",
			"value": "eid"
		},
		{
			"key": "uid",
			"value": "uid"
		}
	]
}